#include <memory>
#include <iostream>

class Test{
public:
    Test()
    {
        std::cout << "Test()" << std::endl;
    }
    ~Test()
    {
        std::cout << "~Test()" << std::endl;
    }
    int a;
};

// std::unique_ptr<Test> 以值传递的方式传递给函数，这会导致尝试调用 unique_ptr 的拷贝构造函数。
// 然而，std::unique_ptr 的拷贝构造函数是删除的（deleted），这意味着它不能被复制
void functions(std::unique_ptr<Test> p)
{
    std::cout<<"fun "<<p->a<<std::endl;
}

void function(const std::unique_ptr<Test>& p)
{
    std::cout<<"fun "<<p->a<<std::endl;
}
int main()
{
    std::unique_ptr<Test> p = std::make_unique<Test>();
    function(p);
    std::cout<<p->a<<std::endl;

    functions(std::move(p));
    std::cout<<p->a<<std::endl;
    return 0;
}